package poo.biblioteca.utilidades;

import biblioteca.excepciones.ExcepcionDeAplicacion;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

public class UtlManejadorImagenes {

    public ImageIcon generarIconoPreservandoMedidasDeLabel(JLabel label, File archivo) throws ExcepcionDeAplicacion {
        try {
            BufferedImage image = ImageIO.read(archivo);
            return generarIconoPreservandoMedidasDeLabel(label, image);
        } catch (IOException ex) {
            throw new ExcepcionDeAplicacion("No se puede leer el archivo de portada");
        }
    }

    public ImageIcon generarIconoPreservandoMedidasDeLabel(JLabel label, ImageIcon icono) {
        Image imagenOriginal = icono.getImage();
        
        Image temporal;
        int alto = 0, ancho = 0;
        int imagenOriginalWidth = imagenOriginal.getWidth(null);
        int imagenOriginalHeight = imagenOriginal.getHeight(null);
        
        //Imagen Apaisada
        if (imagenOriginalWidth / imagenOriginalHeight >= 1) {

            if (imagenOriginalWidth > label.getWidth()) {
                ancho = label.getWidth();
                alto = (int) ((float) label.getWidth() * imagenOriginalHeight / imagenOriginalWidth);


                if (alto > label.getHeight()) {
                    alto = label.getHeight();
                    ancho = (int) ((float) ancho * (float) label.getHeight() / (float) alto);

                }
            }
        } else {//imagen Retrato

            if (imagenOriginalHeight > label.getHeight()) {
                alto = label.getHeight();
                ancho = (int) ((float) imagenOriginalWidth * label.getHeight() / imagenOriginalHeight);

                if (ancho > label.getWidth()) {
                    ancho = label.getWidth();
                    alto = (int) ((float) alto * (float) label.getWidth() / (float) ancho);
                }
            }
        }

        temporal = imagenOriginal.getScaledInstance(ancho,
                alto,
                Image.SCALE_SMOOTH);

        return new ImageIcon(temporal);
    }

    public ImageIcon generarIconoPreservandoMedidasDeLabel(JLabel label, BufferedImage imagenOriginal) {

        Image temporal;

        int alto = 0, ancho = 0;

        //Imagen Apaisada
        if (imagenOriginal.getWidth() / imagenOriginal.getHeight() >= 1) {

            if (imagenOriginal.getWidth() > label.getWidth()) {
                ancho = label.getWidth();
                alto = (int) ((float) label.getWidth() * imagenOriginal.getHeight() / imagenOriginal.getWidth());


                if (alto > label.getHeight()) {
                    alto = label.getHeight();
                    ancho = (int) ((float) ancho * (float) label.getHeight() / (float) alto);

                }
            }
        } else {//imagen Retrato

            if (imagenOriginal.getHeight() > label.getHeight()) {
                alto = label.getHeight();
                ancho = (int) ((float) imagenOriginal.getWidth() * label.getHeight() / imagenOriginal.getHeight());

                if (ancho > label.getWidth()) {
                    ancho = label.getWidth();
                    alto = (int) ((float) alto * (float) label.getWidth() / (float) ancho);
                }
            }
        }

        temporal = imagenOriginal.getScaledInstance(ancho,
                alto,
                Image.SCALE_SMOOTH);

        return new ImageIcon(temporal);
    }
}
